import store from '@/store'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
    // 重写push 紧跟注册路由下书写 生效了
const originPush = VueRouter.prototype.push
VueRouter.prototype.push = function push(location) {
        return originPush.call(this, location).catch(err => err)
    }
    // 将路由规则拆分 模块化
import routes from './routes'
const router = new VueRouter({
        mode: 'hash',
        routes,
        scrollBehavior() {
            // 始终滚动到顶部
            return { y: 0 }
        },
    })
    // 全局守卫 【前置】
router.beforeEach(async(to, from, next) => {
    // 获取仓库中的token
    let token = store.state.user.token
        // 获取仓库中的用户信息
    let nicKname = store.state.user.nickName
        //  如果token为真 代表用户已登录
    if (token) {
        // 用户已登录的话 首先不可切换至login组件
        if (to.path == '/login') {
            next('/')
        } else {
            if (nicKname) {
                next()
            } else {

                try {
                    await store.dispatch('getUserInfo')

                    next()
                } catch (error) {

                    await store.dispatch('getloginOut')
                    next('/login')
                    console.log(5);

                }
            }
        }

    } else {
        // 未登录不可切换至【交易、支付、支付成功、提交订单页、个人订单页】
        let topath = to.path
            // 不等于-1即代表topath中包含未登录不可去的组件 
        if (topath.indexOf('/pay') != -1 || topath.indexOf('/trade') != -1 || topath.indexOf('/center') != -1) {

            next(`/login?redirect=${topath}`)
        } else {
            next()
        }
    }
})
export default router